From 09b44d7ab5786e5d973663890820fd8f828b4d04 Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Sun, 24 Mar 2013 00:41:07 +0900 Subject: [PATCH] GtkColorChooserDialog: Define children with a GtkBuilder template --- gtk/Makefile.am | 1 + gtk/gtk.gresource.xml | 1 + gtk/gtkcolorchooserdialog.c | 68 +++++------------------------- gtk/gtkcolorchooserdialog.ui | 82 ++++++++++++++++++++++++++++++++++++ gtk/tests/templates.c | 11 +++++ 5 files changed, 106 insertions(+), 57 deletions(-) create mode 100644 gtk/gtkcolorchooserdialog.ui diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 99acbebfce..7fd005d775 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -1100,6 +1100,7 @@ COMPOSITE_TEMPLATES = \ gtkappchooserdialog.ui \ gtkappchooserwidget.ui \ gtkassistant.ui \ + gtkcolorchooserdialog.ui \ gtkdialog.ui \ gtkinfobar.ui \ gtklockbutton.ui \ diff --git a/gtk/gtk.gresource.xml b/gtk/gtk.gresource.xml index 9361124d95..2a83c2ab9d 100644 --- a/gtk/gtk.gresource.xml +++ b/gtk/gtk.gresource.xml @@ -15,6 +15,7 @@ gtkappchooserdialog.ui gtkappchooserwidget.ui gtkassistant.ui + gtkcolorchooserdialog.ui gtkdialog.ui gtkinfobar.ui gtklockbutton.ui diff --git a/gtk/gtkcolorchooserdialog.c b/gtk/gtkcolorchooserdialog.c index fcde97fd32..61c3860517 100644 --- a/gtk/gtkcolorchooserdialog.c +++ b/gtk/gtkcolorchooserdialog.c @@ -101,67 +101,11 @@ selected_cb (GtkButton *button, static void gtk_color_chooser_dialog_init (GtkColorChooserDialog *cc) { - GtkColorChooserDialogPrivate *priv; - GtkDialog *dialog = GTK_DIALOG (cc); - GtkWidget *action_area, *content_area; - cc->priv = G_TYPE_INSTANCE_GET_PRIVATE (cc, GTK_TYPE_COLOR_CHOOSER_DIALOG, GtkColorChooserDialogPrivate); - priv = cc->priv; - - content_area = gtk_dialog_get_content_area (dialog); - action_area = gtk_dialog_get_action_area (dialog); - - gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); - gtk_box_set_spacing (GTK_BOX (content_area), 2); /* 2 * 5 + 2 = 12 */ - gtk_container_set_border_width (GTK_CONTAINER (action_area), 5); - gtk_box_set_spacing (GTK_BOX (action_area), 6); - - gtk_widget_push_composite_child (); - - gtk_window_set_resizable (GTK_WINDOW (cc), FALSE); - - /* Create the content area */ - priv->chooser = gtk_color_chooser_widget_new (); - gtk_container_set_border_width (GTK_CONTAINER (priv->chooser), 5); - gtk_widget_show (priv->chooser); - gtk_box_pack_start (GTK_BOX (content_area), - priv->chooser, TRUE, TRUE, 0); - g_signal_connect (priv->chooser, "notify::rgba", - G_CALLBACK (propagate_notify), cc); - - g_signal_connect (priv->chooser, "notify::show-editor", - G_CALLBACK (propagate_notify), cc); - - g_signal_connect (priv->chooser, "color-activated", - G_CALLBACK (color_activated_cb), cc); - - /* Create the action area */ - priv->cancel_button = gtk_dialog_add_button (dialog, - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL); - - /* We emit the response for the Select button manually, - * since we want to save the color first - */ - priv->select_button = gtk_button_new_from_stock (_("_Select")); - g_signal_connect (priv->select_button, "clicked", - G_CALLBACK (selected_cb), dialog); - gtk_widget_set_can_default (priv->select_button, TRUE); - gtk_widget_show (priv->select_button); - gtk_dialog_add_action_widget (dialog, priv->select_button, GTK_RESPONSE_OK); - gtk_widget_grab_default (priv->select_button); - - gtk_dialog_set_alternative_button_order (dialog, - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - gtk_window_set_title (GTK_WINDOW (cc), _("Select a Color")); - - gtk_widget_pop_composite_child (); + gtk_widget_init_template (GTK_WIDGET (cc)); } static void @@ -256,6 +200,16 @@ gtk_color_chooser_dialog_class_init (GtkColorChooserDialogClass *class) g_param_spec_boolean ("show-editor", P_("Show editor"), P_("Show editor"), FALSE, GTK_PARAM_READWRITE)); + /* Bind class to template + */ + gtk_widget_class_set_template_from_resource (widget_class, + "/org/gtk/libgtk/gtkcolorchooserdialog.ui"); + gtk_widget_class_bind_child (widget_class, GtkColorChooserDialogPrivate, chooser); + gtk_widget_class_bind_child (widget_class, GtkColorChooserDialogPrivate, cancel_button); + gtk_widget_class_bind_child (widget_class, GtkColorChooserDialogPrivate, select_button); + gtk_widget_class_bind_callback (widget_class, selected_cb); + gtk_widget_class_bind_callback (widget_class, propagate_notify); + gtk_widget_class_bind_callback (widget_class, color_activated_cb); g_type_class_add_private (class, sizeof (GtkColorChooserDialogPrivate)); } diff --git a/gtk/gtkcolorchooserdialog.ui b/gtk/gtkcolorchooserdialog.ui new file mode 100644 index 0000000000..c722c345c6 --- /dev/null +++ b/gtk/gtkcolorchooserdialog.ui @@ -0,0 +1,82 @@ + + + + + diff --git a/gtk/tests/templates.c b/gtk/tests/templates.c index ea7b3065cd..a76e20a8f9 100644 --- a/gtk/tests/templates.c +++ b/gtk/tests/templates.c @@ -139,6 +139,16 @@ test_app_chooser_dialog_basic (void) gtk_widget_destroy (widget); } +static void +test_color_chooser_dialog_basic (void) +{ + GtkWidget *widget; + + widget = gtk_color_chooser_dialog_new (NULL, NULL); + g_assert (GTK_IS_COLOR_CHOOSER_DIALOG (widget)); + gtk_widget_destroy (widget); +} + int main (int argc, char **argv) { @@ -162,6 +172,7 @@ main (int argc, char **argv) g_test_add_func ("/Template/GtkStatusBar/Basic", test_statusbar_basic); g_test_add_func ("/Template/GtkAppChooserWidget/Basic", test_app_chooser_widget_basic); g_test_add_func ("/Template/GtkAppChooserDialog/Basic", test_app_chooser_dialog_basic); + g_test_add_func ("/Template/GtkColorChooserDialog/Basic", test_color_chooser_dialog_basic); return g_test_run(); } -- 2.30.2